Ext.ns('Contrato');

function mes_color(val) {
	if (val > 0) {
		return '<span style="color:red;">' + Math.abs(val) + '</span>';
	} else if (val < 0) {
		return '<span style="color:green;">' + Math.abs(val) + '</span>';
	}
	return val;
}

Contrato.Grid = Ext.extend(Ext.grid.GridPanel, {
	width : 900,
	height : 350,
	frame : true,
	collapsible : true,
	autoScroll : true,
	url : '/cake/syscable/TcContratos/buscacontrato',
	initComponent : function() {
		this.rowActions = new Ext.ux.grid.RowActions({
					header : 'Acciones',
					autoWidth : true,
					keepSelection : true,
					actions : [{
								iconIndex : 'action1',
								qtipIndex : 'qtip1',
								iconCls : 'icon-undo',
								tooltip : 'Editar'
							}, {
								iconIndex : 'action2',
								qtipIndex : 'qtip2',
								iconCls : 'icon-undo',
								tooltip : 'Acciones'
							}, {
								iconIndex : 'action3',
								qtipIndex : 'qtip3',
								iconCls : 'icon-undo',
								tooltip : 'Descuento'
							}]
				});
		/*
		 * Crea la expansion para ver en detalle cada contrato
		 */
		this.rowActions.on('action', this.onRowAction, this);
		this.rowExpander = new Ext.ux.grid.RowExpander({
			tpl : new Ext.Template(
					'--<br>',
					'<b>Numero Contrato:</b> {TcContrato-numero_contrato}',
					'&nbsp &nbsp &nbsp &nbsp <b>Cantidad Televisores:</b> {TcContrato-cantidad_televisores}',
					'<br/><b>Fecha Instalacion:</b> {TcContrato-fecha_instalacion:date("d-F-Y")}',
					'&nbsp &nbsp &nbsp &nbsp<b>Fecha Reinstalacion:</b> {TcContrato-fecha_reinstalacion:date("d-F-Y")}',
					'&nbsp &nbsp &nbsp &nbsp<b>Fecha Corte:</b> {TcContrato-fecha_corte:date("d-F-Y")}',
					'&nbsp &nbsp &nbsp &nbsp<b>Fecha Cancelacion:</b> {TcContrato-fecha_cancelacion:date("d-F-Y")}',
					'<p><b>Estado:</b> {TcEstadoContrato-descripcion}</p>',
					'<b>Colonia:</b> {MgColonia-descripcion}',
					'&nbsp &nbsp &nbsp &nbsp <b>Casa:</b> {TcContrato-casa}',
					'&nbsp &nbsp &nbsp &nbsp <b>Bloque:</b> {TcContrato-bloque}',
					'<p><b>Descripcion Direccion:</b> {TcContrato-descripcion_direccion}</p>',
					'<p><b>Comentarios:</b> {TcContrato-comentario}</p>--'),
			getRowClass : function(record, index) {
				if (!record) {
					return '';
				}
				if (record.get('TcEstadoContrato-descripcion') == 'DESCONECTADO') {
					return 'yellow-row';
				}
				if (record.get('TcEstadoContrato-descripcion') == 'CORTADO') {
					return 'red-row';
				}
				if (record.get('TcEstadoContrato-descripcion') == 'SUSPENDIDO') {
					return 'orange-row';
				}
			}
		});
		var config = {
			store : new Ext.data.GroupingStore({
				groupField : false,
				proxy : new Ext.data.HttpProxy({
							url : this.url
						}),
				reader : new Ext.data.JsonReader({
							id : 'TcContrato-id',
							root : 'contratos',
							totalProperty : 'total',
							fields : [{
										name : 'TcContrato-id'
									}, {
										name : 'TcContrato-contrato'
									}, {
										name : 'TcContrato-numero_contrato'
									}, {
										name : 'TcContrato-mg_cliente_id'
									}, {
										name : 'TcEstadoContrato-descripcion'
									}, {
										name : 'TcContrato-tc_tipo_contrato_id'
									}, {
										name : 'TcContrato-tc_estado_contrato_id'
									}, {
										name : 'TcContrato-descripcion'
									}, {
										name : 'TcContrato-cantidad_televisores'
									}, {
										name : 'TcContrato-comentario'
									}, {
										name : 'TcContrato-mg_colonia_id'
									}, {
										name : 'TcContrato-fecha_instalacion',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-fecha_reinstalacion',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-fecha_corte',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-fecha_cancelacion',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-fecha_ultimo_pago_banco',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-fecha_ultimo_pago',
										type : 'date',
										dateFormat : 'Y-m-d'
									}, {
										name : 'TcContrato-telefono'
									}, {
										name : 'MgColonia-descripcion'
									}, {
										name : 'TcContrato-casa'
									}, {
										name : 'TcContrato-bloque'
									}, {
										name : 'TcContrato-calle'
									}, {
										name : 'meses_deuda'
									}, {
										name : 'TcContrato-descripcion_direccion'
									}, {
										name : 'action1',
										type : 'string'
									}, {
										name : 'action2',
										type : 'string'
									}, {
										name : 'action3',
										type : 'string'
									}, {
										name : 'qtip1',
										type : 'string'
									}, {
										name : 'qtip2',
										type : 'string'
									}, {
										name : 'qtip3',
										type : 'string'
									}]
						})
			}),
			sm : new Ext.grid.RowSelectionModel({
				singleSelect : true,
				listeners : {
					load : {
						scope : this,
						fn : function() {
							alert(this.id);
							this.getSelectionModel().selectFirstRow();
						}
					},
					rowselect : {
						scope : this,
						fn : function(grid, rowIndex, e, record) {
							var selectionModel = this.getSelectionModel();
							var record = selectionModel.getSelected();
							var contratovalue = record.get('TcContrato-id');
							Ext.getCmp('grdHistorialContratoMovimientos').store.baseParams['contratoid'] = contratovalue;
							Ext.getCmp('grdAccion').store.baseParams['contratoid'] = contratovalue;
							Ext.getCmp('grdDescuento').store.baseParams['contratoid'] = contratovalue;
							Ext.getCmp('grdDescuento').store.load({
										params : {
											limit : 5,
											start : 0
										}
									});
							Ext.getCmp('grdAccion').store.load({
										params : {
											limit : 5,
											start : 0
										}
									});
							Ext.getCmp('grdHistorialContratoMovimientos').store
									.load({
												params : {
													limit : 5,
													start : 0
												}
											});
						}
					}
				}
			}),
			columns : [this.rowExpander, {
						header : "ID",
						dataIndex : 'TcContrato-id',
						hidden : true,
						width : 60
					}, {
						header : "No. Contrato",
						dataIndex : 'TcContrato-contrato',
						width : 60,
						hidden : false
					}, {
						header : "Estado",
						dataIndex : 'TcEstadoContrato-descripcion',
						width : 80,
						hidden : true
					}, {
						header : "Codigo Cliente",
						dataIndex : 'TcContrato-mg_cliente_id',
						width : 65
					}, {
						header : "Descripcion",
						dataIndex : 'TcContrato-descripcion',
						width : 170
					}, {
						header : "Meses Deuda",
						dataIndex : 'meses_deuda',
						renderer : mes_color,
						width : 65
					}, {
						header : "Colonia",
						dataIndex : 'MgColonia-descripcion'
					}, {
						header : "Fecha Ultimo Pago",
						dataIndex : 'TcContrato-fecha_ultimo_pago_banco',
						renderer : Ext.util.Format.dateRenderer('d-F-Y'),
						hidden : false,
						width : 95
					}, {
						header : "Ultimo Mes Pago",
						dataIndex : 'TcContrato-fecha_ultimo_pago',
						renderer : Ext.util.Format.dateRenderer('F-Y'),
						hidden : false
					}, {
						header : "Telefono",
						dataIndex : 'TcContrato-telefono',
						hidden : false,
						width : 55
					}, this.rowActions

			],
			stripeRows : true,
			columnLines : true,
			title : 'Listado Contratos',
			iconCls : 'icon-grid',
			plugins : [this.rowExpander, this.rowActions,
					new Ext.ux.grid.Search({
						mode : 'remote',
						iconCls : 'icon-zoom',
						dateFormat : 'm/d/Y',
						minLength : 1,
						width : 250,
						searchText : 'Buscar',
						searchTipText : 'Ingrese los datos a buscar y presione ENTER',
						selectAllText : 'Buscar Todos',
						shortcutKey : 'b',
						shortcutModifier : 'shift',
						disableIndexes : ['meses_deuda', 'TcContrato-id']
					})],
			view : new Ext.grid.GroupingView({
				enableGrouping : false,
				groupTextTpl : '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Elementos" : "Elemento"]})'
			})
		};
		Ext.apply(this, Ext.apply(this.initialConfig, config));
		this.bbar = new Ext.PagingToolbar({
					pageSize : 12,
					store : this.store,
					displayInfo : true,
					displayMsg : 'Mostrando contratos del {0} - {1} de {2}',
					emptyMsg : 'No hay contratos que mostrar'
				});
		Contrato.Grid.superclass.initComponent.apply(this, arguments);
	},
	onRender : function() {
		this.store.load();
		Contrato.Grid.superclass.onRender.apply(this, arguments);
	},
	onRowAction : function(grid, record, action, row, col) {
		switch (action) {
			case 'icon-edit-record' :
				var saveData = new Ext.data.Connection().request({
					url : '/cake/syscable/TcContratos/accesoSupervisor',
					success : function(response) {
						if (Ext.decode(response.responseText).success) {
							var vtnContrato = new Contratos.vtnDatos({
										id : 'vtnDatosEditarContrato',
										tipo : 'Editar',
										url : '/cake/syscable/TcContratos/editExt',
										title : 'Editar Contrato'
									});
							for (j = 0; j <= 1; j = j + 1) {
								for (i = 0; i <= Ext.getCmp('tbDatosContrato').items
										.itemAt(j).items.getCount()
										- 1; i = i + 1) {
									if (Ext.getCmp('tbDatosContrato').items
											.itemAt(j).items.itemAt(i).id
											.substring(0, 3) == 'cbx') {
										nameItem = Ext
												.getCmp('tbDatosContrato').items
												.itemAt(j).items.itemAt(i).hiddenName;
									} else {
										nameItem = Ext
												.getCmp('tbDatosContrato').items
												.itemAt(j).items.itemAt(i).name;
									}

									Ext
											.getCmp(Ext
													.getCmp('tbDatosContrato').items
													.itemAt(j).items.itemAt(i).id)
											.setValue(record.get(nameItem
													.replace('data[', '')
													.replace('][', '-')
													.replace(']', '')));
								}
							}
							Ext.getCmp('vtnDatosEditarContrato').show();
						} else {
							Ext.MessageBox.alert('Mensaje', 'No tiene acceso');
						}
					},
					failure : function(response) {
						Ext.MessageBox.alert('Message',
								'No tiene acesso para editar contratos!');
					}
				});

				break;
			case 'icon-error' :
				vtnAgregarDescuento = new Ext.Window({
							id : 'vtnAgregarDescuento',
							layout : 'border',
							closable : true,
							closeAction : 'close',
							width : 550,
							height : 210,
							plain : false,
							maximizable : false,
							resizable : false,
							modal : true,
							title : 'Agregar Descuento',
							frame : true,
							items : [{
										region : 'center',
										width : 200,
										layout : 'fit',
										frame : false,
										border : false,
										items : [{
													xtype : 'frmAgregarDescuento',
													id : 'frmAgregarDescuento'
												}]
									}]
						});
				vtnAgregarDescuento.show();
				Ext.getCmp('frmAgregarDescuento').getForm().reset();
				Ext.getCmp('cbxTipoDescuento').store.load();
				Ext.getCmp('tfIdContratoAgregarDescuento').setValue(record
						.get('TcContrato-id'));
				Ext.getCmp('tfDescripcionContratoAgregarDescuento')
						.setValue(record.get('TcContrato-descripcion'));
				Ext.getCmp('tfNoContratoAgregarDescuento').setValue(record
						.get('TcContrato-contrato'));
				break;
			case 'icon-actions' :
				var vtnContrato = new Accion.vtnAgregar({});
				Ext.getCmp('vtnAgregarAccion').show()
				Ext.getCmp('tfIdContratoAgregarAccion').setValue(record
						.get('TcContrato-id'));
				Ext.getCmp('tfDescripcionContratoAgregarAccion')
						.setValue(record.get('TcContrato-descripcion'));
				Ext.getCmp('tfNoContratoAgregarAccion').setValue(record
						.get('TcContrato-contrato'));
				Ext.getCmp('tfEstadoAgregarAccion').setValue('1');
				break;
			break;
	}
	}
});
Ext.reg('grdContrato', Contrato.Grid);

Contrato.Accordion = Ext.extend(Ext.Panel, {
			frame : false,
			width : 900,
			height : 220,
			id : 'contrato-accordion',
			initComponent : function() {
				var config = {
					layout : {
						type : 'accordion',
						animate : true
					},
					items : [{
								xtype : 'grdHistorialMovimientos',
								id : 'grdHistorialContratoMovimientos'
							}, {
								xtype : 'grdAccion',
								id : 'grdAccion'
							}, {
								xtype : 'grdDescuento',
								id : 'grdDescuento'
							}]
				};
				Ext.apply(this, Ext.apply(this.initialConfig, config));
				Contrato.Accordion.superclass.initComponent.apply(this,
						arguments);
			}
		});
Ext.reg('grdAccordionContrato', Contrato.Accordion);
/*
 * Panel que muestra todo el contenido de contratos
 */
Contrato.pnlPrincipal = Ext.extend(Ext.Panel, {
			widht : 900,
			height : 630,
			// layout : 'border',
			frame : true,
			initComponent : function() {
				var config = {
					title : 'Contratos',
					items : [{
								region : 'center',
								split : true,
								frame : false,
								border : false,
								items : [{
											xtype : 'grdContrato',
											id : 'grdPrincipalContrato'
										}, {
											xtype : 'grdAccordionContrato'
										}]
							}],
					tbar : [{ // Inline toolbars: Top bar
						text : 'Agregar Cliente Y Contrato',
						tooltip : 'Agregar un Cliente y luego un Contrato',
						iconCls : 'icon-plus',
						handler : function() {
							var vtnTipoCliente = new Clientes.vtnTipo({
										id : 'vtnTipoCliente'
									});
							Ext.getCmp('vtnTipoCliente').show();
						}
					}, '-', {
						text : 'Agregar Contrato',
						tooltip : 'Agregar un Contrato',
						iconCls : 'icon-plus',
						handler : function() {
							var vtnContrato = new Contratos.vtnDatos({
										id : 'vtnDatosAgregarContrato',
										tipo : 'Agregar',
										url : '/cake/syscable/TcContratos/insertarExt'
									});
							vtnContrato.show()
						}
					}]
				};
				Ext.apply(this, Ext.apply(this.initialConfig, config));
				Contrato.pnlPrincipal.superclass.initComponent.apply(this,
						arguments);
			}
		});
Ext.reg('pnlPrincipalContrato', Contrato.pnlPrincipal);